自鯖建立 2:SSH接続でのログイン方法を多少安全にする(公開鍵認証)
前提:Misskey自鯖建立(XServerVPS)メモ【自由研究】
前:
自鯖建立 1:ひとまずのセットアップまで - Misskey
自鯖建立 1.5:コマンドとか操作とかひとまずのメモ(Ubuntu)
⭐先ほど、VPSのSSL/TLS設定をする・Misskeyをアップデートする のためにSSH接続したところでした。
この時はrootユーザーとしてパスワードでログインしたが、このやり方はセキュリティ上よくないらしいので、公開鍵認証という別のやり方でログインできるように設定していく。
パスワードは漏洩しやすいというほかになんかの理由でパスワード認証より公開鍵認証のほうがいいらしいです。参考:SSHの公開鍵認証における良くある誤解の話 #暗号 - Qiita:公開鍵認証の特長
⭐️SSHクライアントにTera Termを使っています(windows)
ほかのやり方はわかりません
⭐やった️後から書いてるのでなんか抜けてるかもしれませんごめんご!今度やり直して確認してみたい!!!話半分でお願いします!マジ!
## ここでやりたいこと
rootログインを禁止
パスワード認証でのログインを禁止
代わりに公開鍵認証
…のために、まずroot以外に普段使う一般ユーザーをつくる
## 公開鍵認証てなに
なんとなく理解する
どこに何を置いとくのが必要とかを理解
## 新規ユーザー作成
真っ先にrootログインを封じると誰もログインできなくなるので、まず普段ログインするために使う新規の一般ユーザーをつくり、rootの権限を借りられるようにする。といってももし誰もSSHでログインできなくなった場合でも、VPS管理画面のコンソールから直接rootのパスワードでログインできるのでなんとかなる。
手順
詳しいやり方は詳しい人に教えてもらおう
Ubuntuでユーザーの作成とsudo権限を付与するとか見たような…(曖昧)
rootでログイン。
新規ユーザー(たとえばhashiyaとする)を追加
$ adduser hashiyaで新規追加するらしい。
パスワードについて
パスワードでログインさせないようにするもののパスワードが使われなくなるわけではない。
$ sudoする時など必要になる。
のでちゃんとしたパスワードにする。
hashiyaにsudo権限(root権限でコマンド実行できるコマンドであるsudoを実行するための権限)を付与
グループとかよくわからないんで詳しい人に聞こう
新規ユーザー追加の設定
ログインシェルの確認・変更
$ echo $SHELLでログインシェルを確認
いつもbashを使うのでログインシェルもbashにしたい。shとかだったら変えておく。
✅参考:https://vinelinux.org/docs/vine6/cui-guide/othershell.html
$ ls /bin/bashでbashの存在を一応確認してみる
bashはここに入っている
/usr/bin/bashもあるらしいけど…
$ chsh -s /bin/bashで変更。
ログインし直して$ echo $SHELLで確認。
$ lsが自動で$ ls --color=autoになるようにする
ディレクトリに色がついて表示されるのがデフォルトになるので、ファイルと見分けつくようになる。rootはこうなってた。
✅️参考:コマンドの別名を定義する(エイリアス)
~/.bashrcにエイリアスを追加するやり方。
これは自分用のbashの設定ファイル。
読み込まれたとき、書いてある内容を実行する。シェルスクリプトとして書く。
手順
$ aliasで既にあるかどうか確認。なければ👇
$ nano ~/.bashrc
nanoエディタが開くので、必要なことを以下のように追記する。
alias ls='ls --color=auto'をコピーしておく。
右クリックかalt+Vでペースト。
ctrl+x→yで保存して閉じようとする。
このファイルに上書きするので、enter。するとコマンドラインに戻る。
$ catコマンドで確認してみてもいいでしょう
$ source ~/.bashrc
設定を読み込む
$ ls -a
などしてみて、ディレクトリに色がついたか確認。
~/.bashrcがログイン時に読み込まれるようにする
非ログインシェルでは、切り替えたときに勝手に読み込まれる。
が、ログインシェルで勝手に読み込ませたい場合、~/.bash_profileの中に「ログインシェルで~/.bashrcを読み込んでね」と書く必要。手動なら$ sourceでできるけど。
https://wa3.i-3-i.info/word13649.html
手順
✅参考:bashが起動時に実行するファイル:UNIX処方箋 - ITmedia エンタープライズ
~/.bash_profileに、さっきと同じやり方で以下を追記。
code:bash
if -f ~/.bashrc ; then
. ~/.bashrc
fi
sourceの短縮形が.(ドット)なので、sourceでも同じらしい
シェルによってはsourceで書いても実行できないらしい?
これで新規ユーザーが多少いい感じに使えるようになった
追加の設定はやんなくてもやれるが先にやっとくと楽だなと後で思ったので書きました
ディレクトリとファイルの見分けがつかないとかビミョーに不便
bashとshの違い(シェルが違うということ、シェルという概念、シェルの違い)を分かっていなかったので、bashでできるがshではできないことをやろうとして、shになってることに気付かず、なんでやねんとなっていた
## 公開鍵認証でログインできるようにする
鍵はコマンドで生成するやり方が一般的?かわかりませんが、VPS管理画面のSSH Key生成機能が気になったので今回はこれを使いました。申込時にスルーしたやつ
https://gyazo.com/8d4faddc71d275937d499bfac16e9220
どこにどんなファイルが必要とかは公開鍵認証てなにで
SSH Keyをつくる
✅参考:SSH Key | XServer VPS(マニュアル)の最初の章「SSH Keyを登録する」
自動生成にした。
DLしたpemファイルが秘密鍵。SSH Key画面で確認できるようになったのは公開鍵。
秘密鍵のpemファイルはTera Termでそのまま使える形式
ppkにしないといけないとなぜか思っちゃったんだけど普通に使える!
https://qiita.com/mzk0101/items/c5befa81ac23708d3819#comment-7c4b96dbf640c12f0bb8
すいません!
ごめん!
SSH Key生成機能で、ホスト鍵が設置されるっぽい
先程のとおり、ホスト鍵はサーバーが本物かどうかチェックするための鍵ペア。(公開鍵認証てなに#67952b08023cc50000e1793d)
https://gyazo.com/fa0749bcafc7b1aee50cf5c3c9529d6d
$ ls -lh /etc/sshした結果(部分スクショ)。
こんな感じで、SSH Key生成したタイミングで/etc/sshにいろいろファイルが設置される(1/11 15時頃のやつ)
4形式のホスト鍵が生成された。
dsa
ecdsa
ed25519
rsa
形式ごとに2つのファイルがある。
ssh_host_dsa_key:秘密鍵
ssh_host_dsa_key.pub:公開鍵
ホスト鍵は特に触る必要ないので、あるな~と思うだけ
公開鍵の場所を確認~手動で登録
さっき作った新規ユーザーとしてパスワード認証でログイン。
SSHでrootでログインすることはこのあとなくなる=公開鍵の設定もいらない。新規ユーザーに公開鍵を設定する。
~/.ssh/authorized_keysが存在するかどうか見る
$ ls ~/.ssh とか、
$ cat ~/.ssh/authorized_keys とかで確認
authorized_keysの中に必要な公開鍵が書いてあれば登録済。ないので次へ進む
~/.sshディレクトリ以下がそもそもない場合、作る
✅参考:リモートのサーバにSSH接続のための公開鍵を設定する #Ubuntu - Qiita:リモート先で公開鍵を認証用に設定する のコマンド参照
code:bash
$ cd ~
$ mkdir .ssh
$ chmod 700 .ssh
$ cd ~/.ssh
$ touch authorized_keys
$ chmod 600 authorized_keys
これで、~/.sshディレクトリ作成、authorized_keysファイル作成、そしてこの2つのアクセス権変更ができた。
authorized_keysに公開鍵をカキコする
$ nano ~/.ssh/authorized_keys
エディタで、XServerVPSの管理画面で出てきた公開鍵をコピペ。
一行になっていることを確認。
十字キーやendキーが使える
ctrl+x→y→enterで保存して閉じる。
ファイル名間違ったりアクセス権変だったりするとできないので確認したり
$ ls -l /.ssh/authorized_keys
-rw... となっていれば読み取り書き込み可
関係ない話
自分はなんか早くやってみたかったので、先にrootに公開鍵を既に設定してみていた
その後新規ユーザーでも公開鍵登録した
同じ鍵でいいか~と思ったので、rootのauthorized_keysファイルを新規ユーザーの~/.sshの中にコピーした
アクセス権変更もする
## 公開鍵認証できるか試す
新しいセッションで試してみる。
✅参考:SSH接続方法 | XServer VPS(マニュアル)の「SSH Keyを設定している場合」の項目
手順通りなら、22番は開いてるはず。
SSH Keyは自動生成したので、パスフレーズは空欄。
さっき作ったユーザー名。
秘密鍵にppkファイルを選択。
ログインできればOK!
いらないセッションは$ exitで終了。
ログインできない場合
authorized_keysの所有者がログインしたいユーザーになってるか?
rootとして作成したりすると多分所有者がrootになる
## SSH接続でのパスワード認証ログイン・rootユーザーのログインを禁止
この操作でrootユーザーがなくなるわけではない。SSHでログインできなくなるだけ。残ってるしsuしたら使える
✅参考 
Linuxで直接rootでのログインを禁止にして、SSHログインをセキュアにする #Ubuntu - Qiita
【ContOS7】SSHのセキュリティ設定/sshd_config #CentOS - Qiita
ポート番号変更は後の手順(SSHのポート番号変更とファイアウォール設定(Ubuntu))に書きました。
SSHdの設定
ssh のセキュリティ対策をまとめてみた
rootでないさっきの新規ユーザーで公開鍵認証ログインができ、sudo権限があることを確認する!
手順
設定ファイル/etc/ssh/sshd_configのバックアップを作っておく。
$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config_orgなどで。
/etc/ssh/sshd_configを書き換える。
$ sudo nano /etc/ssh/sshd_config
PermitRootLogin noに。
PasswordAuthentication noに。
ついでに一応
PermitEmptyPasswords noの行の#を外して明示的に記述しておく。コメントアウトされている行はデフォルト値が使われるらしい
ChallengeResponseAuthentication noの行がなかったので明示的に追記した(デフォルトはこれらしい)
ctrl+x→y→enterで保存して閉じる。
$ sudo systemctl restart sshを実行。
sshというサービスを再起動させる
新しいセッションでログインを試す。
以下両方できなくなったことを確認。
rootのパスワード認証ログイン
新規ユーザーのパスワード認証ログイン
## できたはず
今後SSH接続する際は、作った新規ユーザーとして公開鍵認証でログインします。
rootでのログインはできなくなった。
新規ユーザーでもパスワードログインはできない。
が、新規ユーザーのパスワードはログイン以外で使う場面があるのですぐ出せるようにしておきます。
次:自鯖建立 3:Misskey追加の設定